Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


visualiser-wasm/internal/graph/full.go 65ca9ddc823fcc2c8f8653c553b944b85db0875f (65ca9ddc) Text, 10.94 KB

T8b949e// SPDX-License-Identifier: 0BSD

Tff7b72package Te6edf3graph

Tff7b72import Tb4b4b4(
Ta5d6ff"math"
Ta5d6ff"strings"

Ta5d6ff"github.com/Quad4-Software/MeshChatX/visualiser-wasm/internal/filter"
Ta5d6ff"github.com/Quad4-Software/MeshChatX/visualiser-wasm/internal/hashpos"
Ta5d6ff"github.com/Quad4-Software/MeshChatX/visualiser-wasm/internal/icon"
Tb4b4b4)

T8b949e// InterfaceIn is a preformatted interface row from the JS side.
Tff7b72type Te6edf3InterfaceIn Tff7b72struct Tb4b4b4{
Te6edf3Name Tffa657string Ta5d6ff`json:"name"`
Te6edf3Label Tffa657string Ta5d6ff`json:"label"`
Te6edf3Title Tffa657string Ta5d6ff`json:"title"`
Te6edf3Online Tffa657bool Ta5d6ff`json:"online"`
Tb4b4b4}

T8b949e// DiscoveredIn is a preformatted discovered-interface row.
Tff7b72type Te6edf3DiscoveredIn Tff7b72struct Tb4b4b4{
Te6edf3ID Tffa657string Ta5d6ff`json:"id"`
Te6edf3Label Tffa657string Ta5d6ff`json:"label"`
Te6edf3Title Tffa657string Ta5d6ff`json:"title"`
Te6edf3Connected Tffa657bool Ta5d6ff`json:"connected"`
Te6edf3Hops Tff7b72*Tffa657float64 Ta5d6ff`json:"hops"`
Tb4b4b4}

T8b949e// FullRequest builds the entire visualiser graph in one WASM pass.
Tff7b72type Te6edf3FullRequest Tff7b72struct Tb4b4b4{
Te6edf3MeLabel Tffa657string Ta5d6ff`json:"me_label"`
Te6edf3MeTitle Tffa657string Ta5d6ff`json:"me_title"`
Te6edf3MeImage Tffa657string Ta5d6ff`json:"me_image"`
Te6edf3IdentityHash Tffa657string Ta5d6ff`json:"identity_hash"`
Te6edf3Interfaces Tb4b4b4[Tb4b4b4]Te6edf3InterfaceIn Ta5d6ff`json:"interfaces"`
Te6edf3PathOnlyInterfaces Tb4b4b4[Tb4b4b4]Te6edf3InterfaceIn Ta5d6ff`json:"path_only_interfaces"`
Te6edf3Discovered Tb4b4b4[Tb4b4b4]Te6edf3DiscoveredIn Ta5d6ff`json:"discovered"`
Te6edf3PathTable Tb4b4b4[Tb4b4b4]Te6edf3filterTb4b4b4.Te6edf3PathEntry Ta5d6ff`json:"path_table"`
Te6edf3Announces Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Te6edf3Announce Ta5d6ff`json:"announces"`
Te6edf3Conversations Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Te6edf3Conversation Ta5d6ff`json:"conversations"`
Te6edf3IconCache Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657string Ta5d6ff`json:"icon_cache"`
Te6edf3Positions Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Te6edf3XY Ta5d6ff`json:"positions"`
Te6edf3HopMax Tff7b72*Tffa657float64 Ta5d6ff`json:"hop_max"`
Te6edf3Search Tffa657string Ta5d6ff`json:"search"`
Te6edf3DarkMode Tffa657bool Ta5d6ff`json:"dark_mode"`
Te6edf3LOD Tffa657string Ta5d6ff`json:"lod"`
Te6edf3Aspects Tb4b4b4[Tb4b4b4]Tffa657string Ta5d6ff`json:"aspects"`
Te6edf3QueueIcons Tffa657bool Ta5d6ff`json:"queue_icons"`
Te6edf3IconGeneration Tffa657int Ta5d6ff`json:"icon_generation"`
Te6edf3ShowDiscovered Tffa657bool Ta5d6ff`json:"show_discovered"`
Tb4b4b4}

T8b949e// FullResult is nodes/edges for the whole mesh plus layout seeds.
Tff7b72type Te6edf3FullResult Tff7b72struct Tb4b4b4{
Te6edf3Nodes Tb4b4b4[Tb4b4b4]Te6edf3NodeOut Ta5d6ff`json:"nodes"`
Te6edf3Edges Tb4b4b4[Tb4b4b4]Te6edf3EdgeOut Ta5d6ff`json:"edges"`
Te6edf3IconQueue Tb4b4b4[Tb4b4b4]Te6edf3iconTb4b4b4.Te6edf3QueueItem Ta5d6ff`json:"icon_queue"`
Te6edf3ProcessedNodeIDs Tb4b4b4[Tb4b4b4]Tffa657string Ta5d6ff`json:"processed_node_ids"`
Te6edf3ProcessedEdgeIDs Tb4b4b4[Tb4b4b4]Tffa657string Ta5d6ff`json:"processed_edge_ids"`
Te6edf3LayoutNodes Tb4b4b4[Tb4b4b4]Te6edf3LayoutBody Ta5d6ff`json:"layout_nodes"`
Te6edf3LayoutEdges Tb4b4b4[Tb4b4b4]Te6edf3LayoutSpring Ta5d6ff`json:"layout_edges"`
Tb4b4b4}

T8b949e// LayoutBody is a compact body for the WASM force settle.
Tff7b72type Te6edf3LayoutBody Tff7b72struct Tb4b4b4{
Te6edf3ID Tffa657string Ta5d6ff`json:"id"`
Te6edf3X Tffa657float64 Ta5d6ff`json:"x"`
Te6edf3Y Tffa657float64 Ta5d6ff`json:"y"`
Te6edf3Mass Tffa657float64 Ta5d6ff`json:"mass"`
Te6edf3Fixed Tffa657bool Ta5d6ff`json:"fixed"`
Tb4b4b4}

T8b949e// LayoutSpring is a compact spring for the WASM force settle.
Tff7b72type Te6edf3LayoutSpring Tff7b72struct Tb4b4b4{
Te6edf3From Tffa657string Ta5d6ff`json:"from"`
Te6edf3To Tffa657string Ta5d6ff`json:"to"`
Te6edf3Length Tffa657float64 Ta5d6ff`json:"length"`
Tb4b4b4}

T8b949e// BuildFullGraph constructs me + interfaces + discovered + announce nodes/edges.
Tff7b72func Te6edf3BuildFullGraphTb4b4b4(Te6edf3req Te6edf3FullRequestTb4b4b4) Te6edf3FullResult Tb4b4b4{
Te6edf3searchLower Tff7b72:= Te6edf3stringsTb4b4b4.Te6edf3ToLowerTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3SearchTb4b4b4)
Te6edf3fontColor Tff7b72:= Ta5d6ff"#000000"
Tff7b72if Te6edf3reqTb4b4b4.Te6edf3DarkMode Tb4b4b4{
Te6edf3fontColor Tb4b4b4= Ta5d6ff"#ffffff"
Tb4b4b4}
Te6edf3pos Tff7b72:= Te6edf3reqTb4b4b4.Te6edf3Positions
Tff7b72if Te6edf3pos Tff7b72== Tff7b72nil Tb4b4b4{
Te6edf3pos Tb4b4b4= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Te6edf3XYTb4b4b4{Tb4b4b4}
Tb4b4b4}

Te6edf3est Tff7b72:= Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3PathTableTb4b4b4) Tff7b72+ Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3InterfacesTb4b4b4) Tff7b72+ Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3PathOnlyInterfacesTb4b4b4) Tff7b72+ Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DiscoveredTb4b4b4) Tff7b72+ T79c0ff1
Te6edf3nodes Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3NodeOutTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3edges Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3EdgeOutTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3iconQueue Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3iconTb4b4b4.Te6edf3QueueItemTb4b4b4, T79c0ff0Tb4b4b4, T79c0ff32Tb4b4b4)
Te6edf3nodeIDs Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Tffa657stringTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3edgeIDs Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Tffa657stringTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3layoutNodes Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3LayoutBodyTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3layoutEdges Tff7b72:= Tffa657makeTb4b4b4(Tb4b4b4[Tb4b4b4]Te6edf3LayoutSpringTb4b4b4, T79c0ff0Tb4b4b4, Te6edf3estTb4b4b4)
Te6edf3seen Tff7b72:= Tffa657makeTb4b4b4(Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tff7b72structTb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3estTb4b4b4)

Te6edf3addNode Tff7b72:= Tff7b72funcTb4b4b4(Te6edf3n Te6edf3NodeOutTb4b4b4, Te6edf3mass Tffa657float64Tb4b4b4, Te6edf3fixed Tffa657boolTb4b4b4) Tb4b4b4{
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Te6edf3nTb4b4b4.Te6edf3IDTb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Tff7b72return
Tb4b4b4}
Te6edf3seenTb4b4b4[Te6edf3nTb4b4b4.Te6edf3IDTb4b4b4] Tb4b4b4= Tff7b72structTb4b4b4{Tb4b4b4}Tb4b4b4{Tb4b4b4}
Te6edf3nodes Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3nodesTb4b4b4, Te6edf3nTb4b4b4)
Te6edf3nodeIDs Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3nodeIDsTb4b4b4, Te6edf3nTb4b4b4.Te6edf3IDTb4b4b4)
Te6edf3layoutNodes Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3layoutNodesTb4b4b4, Te6edf3LayoutBodyTb4b4b4{Te6edf3IDTb4b4b4: Te6edf3nTb4b4b4.Te6edf3IDTb4b4b4, Te6edf3XTb4b4b4: Te6edf3nTb4b4b4.Te6edf3XTb4b4b4, Te6edf3YTb4b4b4: Te6edf3nTb4b4b4.Te6edf3YTb4b4b4, Te6edf3MassTb4b4b4: Te6edf3massTb4b4b4, Te6edf3FixedTb4b4b4: Te6edf3fixedTb4b4b4}Tb4b4b4)
Tb4b4b4}
Te6edf3addEdge Tff7b72:= Tff7b72funcTb4b4b4(Te6edf3e Te6edf3EdgeOutTb4b4b4, Te6edf3length Tffa657float64Tb4b4b4) Tb4b4b4{
Te6edf3edges Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3edgesTb4b4b4, Te6edf3eTb4b4b4)
Te6edf3edgeIDs Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3edgeIDsTb4b4b4, Te6edf3eTb4b4b4.Te6edf3IDTb4b4b4)
Te6edf3layoutEdges Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3layoutEdgesTb4b4b4, Te6edf3LayoutSpringTb4b4b4{Te6edf3FromTb4b4b4: Te6edf3eTb4b4b4.Te6edf3FromTb4b4b4, Te6edf3ToTb4b4b4: Te6edf3eTb4b4b4.Te6edf3ToTb4b4b4, Te6edf3LengthTb4b4b4: Te6edf3lengthTb4b4b4}Tb4b4b4)
Tb4b4b4}

Te6edf3meLabel Tff7b72:= Te6edf3reqTb4b4b4.Te6edf3MeLabel
Tff7b72if Te6edf3meLabel Tff7b72== Ta5d6ff"" Tb4b4b4{
Te6edf3meLabel Tb4b4b4= Ta5d6ff"Local Node"
Tb4b4b4}
Tff7b72if Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3meLabelTb4b4b4) Tff7b72|| Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3IdentityHashTb4b4b4) Tb4b4b4{
Te6edf3mp Tff7b72:= Te6edf3resolveOrTb4b4b4(Te6edf3posTb4b4b4, Ta5d6ff"me"Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)
Te6edf3font Tff7b72:= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Te6edf3fontColorTb4b4b4, Ta5d6ff"size"Tb4b4b4: T79c0ff16.0Tb4b4b4, Ta5d6ff"bold"Tb4b4b4: Tff7b72trueTb4b4b4}
Te6edf3me Tff7b72:= Te6edf3NodeOutTb4b4b4{
Te6edf3IDTb4b4b4: Ta5d6ff"me"Tb4b4b4,
Te6edf3GroupTb4b4b4: Ta5d6ff"me"Tb4b4b4,
Te6edf3SizeTb4b4b4: T79c0ff50Tb4b4b4,
Te6edf3OriginalSizeTb4b4b4: T79c0ff50Tb4b4b4,
Te6edf3ShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3OriginalShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3ImageTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3MeImageTb4b4b4,
Te6edf3LabelTb4b4b4: Te6edf3meLabelTb4b4b4,
Te6edf3TitleTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3MeTitleTb4b4b4,
Te6edf3FontTb4b4b4: Te6edf3fontTb4b4b4,
Te6edf3ColorTb4b4b4: Te6edf3colorBlueTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4,
Te6edf3XTb4b4b4: Te6edf3mpTb4b4b4.Te6edf3XTb4b4b4,
Te6edf3YTb4b4b4: Te6edf3mpTb4b4b4.Te6edf3YTb4b4b4,
Tb4b4b4}
Te6edf3applyLODTb4b4b4(Tff7b72&Te6edf3meTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3LODTb4b4b4, Te6edf3fontHighForTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4)
Te6edf3addNodeTb4b4b4(Te6edf3meTb4b4b4, T79c0ff4Tb4b4b4, Tff7b72trueTb4b4b4)
Tb4b4b4}

Te6edf3radius Tff7b72:= T79c0ff400.0
Te6edf3ifaceN Tff7b72:= Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3InterfacesTb4b4b4)
Tff7b72for Te6edf3jTb4b4b4, Te6edf3entry Tff7b72:= Tff7b72range Te6edf3reqTb4b4b4.Te6edf3Interfaces Tb4b4b4{
Tff7b72if Tb4b4b4!Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3LabelTb4b4b4) Tff7b72&& Tb4b4b4!Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4) Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Te6edf3angle Tff7b72:= T79c0ff0.0
Tff7b72if Te6edf3ifaceN Tb4b4b4> T79c0ff0 Tb4b4b4{
Te6edf3angle Tb4b4b4= Tb4b4b4(Tffa657float64Tb4b4b4(Te6edf3jTb4b4b4) Tff7b72/ Tffa657float64Tb4b4b4(Te6edf3ifaceNTb4b4b4)Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72* Te6edf3mathTb4b4b4.Te6edf3Pi
Tb4b4b4}
Te6edf3init Tff7b72:= Te6edf3XYTb4b4b4{Te6edf3XTb4b4b4: Te6edf3mathTb4b4b4.Te6edf3CosTb4b4b4(Te6edf3angleTb4b4b4) Tff7b72* Te6edf3radiusTb4b4b4, Te6edf3YTb4b4b4: Te6edf3mathTb4b4b4.Te6edf3SinTb4b4b4(Te6edf3angleTb4b4b4) Tff7b72* Te6edf3radiusTb4b4b4}
Te6edf3p Tff7b72:= Te6edf3resolveOrTb4b4b4(Te6edf3posTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4, Te6edf3initTb4b4b4.Te6edf3XTb4b4b4, Te6edf3initTb4b4b4.Te6edf3YTb4b4b4)
Te6edf3node Tff7b72:= Te6edf3NodeOutTb4b4b4{
Te6edf3IDTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4,
Te6edf3GroupTb4b4b4: Ta5d6ff"interface"Tb4b4b4,
Te6edf3LabelTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3LabelTb4b4b4,
Te6edf3TitleTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3TitleTb4b4b4,
Te6edf3SizeTb4b4b4: T79c0ff35Tb4b4b4,
Te6edf3OriginalSizeTb4b4b4: T79c0ff35Tb4b4b4,
Te6edf3ShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3OriginalShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3ImageTb4b4b4: Te6edf3ifaceImageTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3OnlineTb4b4b4)Tb4b4b4,
Te6edf3ColorTb4b4b4: Te6edf3ifaceColorTb4b4b4(Te6edf3entryTb4b4b4.Te6edf3OnlineTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4,
Te6edf3FontTb4b4b4: Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Te6edf3fontColorTb4b4b4, Ta5d6ff"size"Tb4b4b4: T79c0ff12.0Tb4b4b4, Ta5d6ff"bold"Tb4b4b4: Tff7b72trueTb4b4b4}Tb4b4b4,
Te6edf3XTb4b4b4: Te6edf3pTb4b4b4.Te6edf3XTb4b4b4,
Te6edf3YTb4b4b4: Te6edf3pTb4b4b4.Te6edf3YTb4b4b4,
Tb4b4b4}
Te6edf3applyLODTb4b4b4(Tff7b72&Te6edf3nodeTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3LODTb4b4b4, Te6edf3fontHighForTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4)
Te6edf3addNodeTb4b4b4(Te6edf3nodeTb4b4b4, T79c0ff2.5Tb4b4b4, Tff7b72falseTb4b4b4)
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Ta5d6ff"me"Tb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Te6edf3eid Tff7b72:= Ta5d6ff"me~" Tff7b72+ Te6edf3entryTb4b4b4.Te6edf3Name
Te6edf3col Tff7b72:= Te6edf3edgeDirectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)
Tff7b72if Tb4b4b4!Te6edf3entryTb4b4b4.Te6edf3Online Tb4b4b4{
Te6edf3col Tb4b4b4= Te6edf3edgeOfflineTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)
Tb4b4b4}
Te6edf3addEdgeTb4b4b4(Te6edf3EdgeOutTb4b4b4{Te6edf3IDTb4b4b4: Te6edf3eidTb4b4b4, Te6edf3FromTb4b4b4: Ta5d6ff"me"Tb4b4b4, Te6edf3ToTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4, Te6edf3ColorTb4b4b4: Te6edf3colTb4b4b4, Te6edf3WidthTb4b4b4: T79c0ff3Tb4b4b4, Te6edf3HiddenTb4b4b4: Tff7b72falseTb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Te6edf3pathIfaceN Tff7b72:= Tffa657lenTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3PathOnlyInterfacesTb4b4b4)
Tff7b72for Te6edf3jTb4b4b4, Te6edf3entry Tff7b72:= Tff7b72range Te6edf3reqTb4b4b4.Te6edf3PathOnlyInterfaces Tb4b4b4{
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Tff7b72if Tb4b4b4!Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3LabelTb4b4b4) Tff7b72&& Tb4b4b4!Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4) Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Te6edf3angle Tff7b72:= T79c0ff0.0
Tff7b72if Te6edf3pathIfaceN Tb4b4b4> T79c0ff0 Tb4b4b4{
Te6edf3angle Tb4b4b4= Tb4b4b4(Tffa657float64Tb4b4b4(Te6edf3jTb4b4b4) Tff7b72/ Tffa657float64Tb4b4b4(Te6edf3pathIfaceNTb4b4b4)Tb4b4b4) Tff7b72* T79c0ff2 Tff7b72* Te6edf3mathTb4b4b4.Te6edf3Pi
Tb4b4b4}
Te6edf3init Tff7b72:= Te6edf3XYTb4b4b4{Te6edf3XTb4b4b4: Te6edf3mathTb4b4b4.Te6edf3CosTb4b4b4(Te6edf3angleTb4b4b4) Tff7b72* Te6edf3radiusTb4b4b4, Te6edf3YTb4b4b4: Te6edf3mathTb4b4b4.Te6edf3SinTb4b4b4(Te6edf3angleTb4b4b4) Tff7b72* Te6edf3radiusTb4b4b4}
Te6edf3p Tff7b72:= Te6edf3resolveOrTb4b4b4(Te6edf3posTb4b4b4, Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4, Te6edf3initTb4b4b4.Te6edf3XTb4b4b4, Te6edf3initTb4b4b4.Te6edf3YTb4b4b4)
Te6edf3node Tff7b72:= Te6edf3NodeOutTb4b4b4{
Te6edf3IDTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4,
Te6edf3GroupTb4b4b4: Ta5d6ff"interface"Tb4b4b4,
Te6edf3LabelTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3LabelTb4b4b4,
Te6edf3TitleTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3TitleTb4b4b4,
Te6edf3SizeTb4b4b4: T79c0ff35Tb4b4b4,
Te6edf3OriginalSizeTb4b4b4: T79c0ff35Tb4b4b4,
Te6edf3ShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3OriginalShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3ImageTb4b4b4: Ta5d6ff"/assets/images/network-visualiser/interface_connected.png"Tb4b4b4,
Te6edf3ColorTb4b4b4: Te6edf3ifaceColorTb4b4b4(Tff7b72trueTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4,
Te6edf3FontTb4b4b4: Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Te6edf3fontColorTb4b4b4, Ta5d6ff"size"Tb4b4b4: T79c0ff12.0Tb4b4b4, Ta5d6ff"bold"Tb4b4b4: Tff7b72trueTb4b4b4}Tb4b4b4,
Te6edf3XTb4b4b4: Te6edf3pTb4b4b4.Te6edf3XTb4b4b4,
Te6edf3YTb4b4b4: Te6edf3pTb4b4b4.Te6edf3YTb4b4b4,
Tb4b4b4}
Te6edf3applyLODTb4b4b4(Tff7b72&Te6edf3nodeTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3LODTb4b4b4, Te6edf3fontHighForTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4)
Te6edf3addNodeTb4b4b4(Te6edf3nodeTb4b4b4, T79c0ff2.5Tb4b4b4, Tff7b72falseTb4b4b4)
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Ta5d6ff"me"Tb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Te6edf3eid Tff7b72:= Ta5d6ff"me~" Tff7b72+ Te6edf3entryTb4b4b4.Te6edf3Name
Te6edf3addEdgeTb4b4b4(Te6edf3EdgeOutTb4b4b4{Te6edf3IDTb4b4b4: Te6edf3eidTb4b4b4, Te6edf3FromTb4b4b4: Ta5d6ff"me"Tb4b4b4, Te6edf3ToTb4b4b4: Te6edf3entryTb4b4b4.Te6edf3NameTb4b4b4, Te6edf3ColorTb4b4b4: Te6edf3edgeDirectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4, Te6edf3WidthTb4b4b4: T79c0ff3Tb4b4b4, Te6edf3HiddenTb4b4b4: Tff7b72falseTb4b4b4}Tb4b4b4, T79c0ff300Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72if Te6edf3reqTb4b4b4.Te6edf3ShowDiscovered Tb4b4b4{
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3disc Tff7b72:= Tff7b72range Te6edf3reqTb4b4b4.Te6edf3Discovered Tb4b4b4{
Tff7b72if Te6edf3reqTb4b4b4.Te6edf3HopMax Tff7b72!= Tff7b72nil Tff7b72&& Te6edf3discTb4b4b4.Te6edf3Hops Tff7b72!= Tff7b72nil Tff7b72&& Tff7b72*Te6edf3discTb4b4b4.Te6edf3Hops Tb4b4b4> Tff7b72*Te6edf3reqTb4b4b4.Te6edf3HopMax Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Tff7b72if Tb4b4b4!Te6edf3filterTb4b4b4.Te6edf3MatchesSearchTb4b4b4(Te6edf3searchLowerTb4b4b4, Te6edf3discTb4b4b4.Te6edf3LabelTb4b4b4) Tb4b4b4{
Tff7b72continue
Tb4b4b4}
Te6edf3xTb4b4b4, Te6edf3y Tff7b72:= Te6edf3hashposTb4b4b4.Te6edf3XYTb4b4b4(Te6edf3discTb4b4b4.Te6edf3IDTb4b4b4, T79c0ff800Tb4b4b4, T79c0ff200Tb4b4b4)
Te6edf3p Tff7b72:= Te6edf3resolveOrTb4b4b4(Te6edf3posTb4b4b4, Te6edf3discTb4b4b4.Te6edf3IDTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)
Te6edf3node Tff7b72:= Te6edf3NodeOutTb4b4b4{
Te6edf3IDTb4b4b4: Te6edf3discTb4b4b4.Te6edf3IDTb4b4b4,
Te6edf3GroupTb4b4b4: Ta5d6ff"discovered"Tb4b4b4,
Te6edf3LabelTb4b4b4: Te6edf3discTb4b4b4.Te6edf3LabelTb4b4b4,
Te6edf3TitleTb4b4b4: Te6edf3discTb4b4b4.Te6edf3TitleTb4b4b4,
Te6edf3SizeTb4b4b4: T79c0ff25Tb4b4b4,
Te6edf3OriginalSizeTb4b4b4: T79c0ff25Tb4b4b4,
Te6edf3ShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3OriginalShapeTb4b4b4: Ta5d6ff"circularImage"Tb4b4b4,
Te6edf3ImageTb4b4b4: Te6edf3ifaceImageTb4b4b4(Te6edf3discTb4b4b4.Te6edf3ConnectedTb4b4b4)Tb4b4b4,
Te6edf3ColorTb4b4b4: Te6edf3discoveredColorTb4b4b4(Te6edf3discTb4b4b4.Te6edf3ConnectedTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4,
Te6edf3FontTb4b4b4: Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Te6edf3fontColorTb4b4b4, Ta5d6ff"size"Tb4b4b4: T79c0ff10.0Tb4b4b4}Tb4b4b4,
Te6edf3XTb4b4b4: Te6edf3pTb4b4b4.Te6edf3XTb4b4b4,
Te6edf3YTb4b4b4: Te6edf3pTb4b4b4.Te6edf3YTb4b4b4,
Tb4b4b4}
Te6edf3applyLODTb4b4b4(Tff7b72&Te6edf3nodeTb4b4b4, Te6edf3reqTb4b4b4.Te6edf3LODTb4b4b4, Te6edf3fontHighForTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4)Tb4b4b4)
Te6edf3addNodeTb4b4b4(Te6edf3nodeTb4b4b4, T79c0ff1.2Tb4b4b4, Tff7b72falseTb4b4b4)
Tff7b72if Te6edf3_Tb4b4b4, Te6edf3ok Tff7b72:= Te6edf3seenTb4b4b4[Ta5d6ff"me"Tb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Te6edf3eid Tff7b72:= Ta5d6ff"me~" Tff7b72+ Te6edf3discTb4b4b4.Te6edf3ID
Te6edf3col Tff7b72:= Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Ta5d6ff"#06b6d4"Tb4b4b4, Ta5d6ff"opacity"Tb4b4b4: T79c0ff0.35Tb4b4b4}
Tff7b72if Te6edf3reqTb4b4b4.Te6edf3DarkMode Tb4b4b4{
Te6edf3colTb4b4b4[Ta5d6ff"color"Tb4b4b4] Tb4b4b4= Ta5d6ff"#155e75"
Tb4b4b4}
Te6edf3addEdgeTb4b4b4(Te6edf3EdgeOutTb4b4b4{Te6edf3IDTb4b4b4: Te6edf3eidTb4b4b4, Te6edf3FromTb4b4b4: Ta5d6ff"me"Tb4b4b4, Te6edf3ToTb4b4b4: Te6edf3discTb4b4b4.Te6edf3IDTb4b4b4, Te6edf3ColorTb4b4b4: Te6edf3colTb4b4b4, Te6edf3WidthTb4b4b4: T79c0ff1Tb4b4b4, Te6edf3HiddenTb4b4b4: Tff7b72falseTb4b4b4}Tb4b4b4, T79c0ff320Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3pathRes Tff7b72:= Te6edf3BuildPathGraphTb4b4b4(Te6edf3RequestTb4b4b4{
Te6edf3PathTableTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3PathTableTb4b4b4,
Te6edf3AnnouncesTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3AnnouncesTb4b4b4,
Te6edf3ConversationsTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3ConversationsTb4b4b4,
Te6edf3IconCacheTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3IconCacheTb4b4b4,
Te6edf3PositionsTb4b4b4: Te6edf3posTb4b4b4,
Te6edf3HopMaxTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3HopMaxTb4b4b4,
Te6edf3SearchTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3SearchTb4b4b4,
Te6edf3DarkModeTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3DarkModeTb4b4b4,
Te6edf3LODTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3LODTb4b4b4,
Te6edf3AspectsTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3AspectsTb4b4b4,
Te6edf3QueueIconsTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3QueueIconsTb4b4b4,
Te6edf3IconGenerationTb4b4b4: Te6edf3reqTb4b4b4.Te6edf3IconGenerationTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3n Tff7b72:= Tff7b72range Te6edf3pathResTb4b4b4.Te6edf3Nodes Tb4b4b4{
Te6edf3addNodeTb4b4b4(Te6edf3nTb4b4b4, T79c0ff1Tb4b4b4, Tff7b72falseTb4b4b4)
Tb4b4b4}
Tff7b72for Te6edf3_Tb4b4b4, Te6edf3e Tff7b72:= Tff7b72range Te6edf3pathResTb4b4b4.Te6edf3Edges Tb4b4b4{
Te6edf3length Tff7b72:= T79c0ff300.0
Tff7b72if Te6edf3eTb4b4b4.Te6edf3Width Tff7b72>= T79c0ff2 Tb4b4b4{
Te6edf3length Tb4b4b4= T79c0ff260
Tb4b4b4}
Te6edf3addEdgeTb4b4b4(Te6edf3eTb4b4b4, Te6edf3lengthTb4b4b4)
Tb4b4b4}
Te6edf3iconQueue Tb4b4b4= Tffa657appendTb4b4b4(Te6edf3iconQueueTb4b4b4, Te6edf3pathResTb4b4b4.Te6edf3IconQueueTff7b72...Tb4b4b4)

Tff7b72return Te6edf3FullResultTb4b4b4{
Te6edf3NodesTb4b4b4: Te6edf3nodesTb4b4b4,
Te6edf3EdgesTb4b4b4: Te6edf3edgesTb4b4b4,
Te6edf3IconQueueTb4b4b4: Te6edf3iconQueueTb4b4b4,
Te6edf3ProcessedNodeIDsTb4b4b4: Te6edf3nodeIDsTb4b4b4,
Te6edf3ProcessedEdgeIDsTb4b4b4: Te6edf3edgeIDsTb4b4b4,
Te6edf3LayoutNodesTb4b4b4: Te6edf3layoutNodesTb4b4b4,
Te6edf3LayoutEdgesTb4b4b4: Te6edf3layoutEdgesTb4b4b4,
Tb4b4b4}
Tb4b4b4}

Tff7b72func Te6edf3resolveOrTb4b4b4(Te6edf3pos Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Te6edf3XYTb4b4b4, Te6edf3id Tffa657stringTb4b4b4, Te6edf3xTb4b4b4, Te6edf3y Tffa657float64Tb4b4b4) Te6edf3XY Tb4b4b4{
Tff7b72if Te6edf3prevTb4b4b4, Te6edf3ok Tff7b72:= Te6edf3posTb4b4b4[Te6edf3idTb4b4b4]Tb4b4b4; Te6edf3ok Tb4b4b4{
Tff7b72return Te6edf3prev
Tb4b4b4}
Te6edf3p Tff7b72:= Te6edf3XYTb4b4b4{Te6edf3XTb4b4b4: Te6edf3xTb4b4b4, Te6edf3YTb4b4b4: Te6edf3yTb4b4b4}
Te6edf3posTb4b4b4[Te6edf3idTb4b4b4] Tb4b4b4= Te6edf3p
Tff7b72return Te6edf3p
Tb4b4b4}

Tff7b72func Te6edf3fontHighForTb4b4b4(Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72if Te6edf3dark Tb4b4b4{
Tff7b72return Te6edf3fontHighLight
Tb4b4b4}
Tff7b72return Te6edf3fontHighDark
Tb4b4b4}

Tff7b72func Te6edf3colorBlueTb4b4b4(Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72if Te6edf3dark Tb4b4b4{
Tff7b72return Te6edf3colorLxmfMultiDark
Tb4b4b4}
Tff7b72return Te6edf3colorLxmfMultiLight
Tb4b4b4}

Tff7b72func Te6edf3ifaceImageTb4b4b4(Te6edf3online Tffa657boolTb4b4b4) Tffa657string Tb4b4b4{
Tff7b72if Te6edf3online Tb4b4b4{
Tff7b72return Ta5d6ff"/assets/images/network-visualiser/interface_connected.png"
Tb4b4b4}
Tff7b72return Ta5d6ff"/assets/images/network-visualiser/interface_disconnected.png"
Tb4b4b4}

Tff7b72func Te6edf3ifaceColorTb4b4b4(Te6edf3onlineTb4b4b4, Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72if Te6edf3online Tb4b4b4{
Te6edf3bg Tff7b72:= Ta5d6ff"#ecfdf5"
Tff7b72if Te6edf3dark Tb4b4b4{
Te6edf3bg Tb4b4b4= Ta5d6ff"#064e3b"
Tb4b4b4}
Tff7b72return Te6edf3nodeColorTb4b4b4(Ta5d6ff"#10b981"Tb4b4b4, Te6edf3bgTb4b4b4)
Tb4b4b4}
Te6edf3bg Tff7b72:= Ta5d6ff"#fef2f2"
Tff7b72if Te6edf3dark Tb4b4b4{
Te6edf3bg Tb4b4b4= Ta5d6ff"#7f1d1d"
Tb4b4b4}
Tff7b72return Te6edf3nodeColorTb4b4b4(Ta5d6ff"#ef4444"Tb4b4b4, Te6edf3bgTb4b4b4)
Tb4b4b4}

Tff7b72func Te6edf3edgeDirectTb4b4b4(Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72if Te6edf3dark Tb4b4b4{
Tff7b72return Te6edf3edgeDirectDark
Tb4b4b4}
Tff7b72return Te6edf3edgeDirectLight
Tb4b4b4}

Tff7b72func Te6edf3edgeOfflineTb4b4b4(Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Te6edf3c Tff7b72:= Ta5d6ff"#ef4444"
Tff7b72if Te6edf3dark Tb4b4b4{
Te6edf3c Tb4b4b4= Ta5d6ff"#f87171"
Tb4b4b4}
Tff7b72return Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657anyTb4b4b4{Ta5d6ff"color"Tb4b4b4: Te6edf3cTb4b4b4, Ta5d6ff"opacity"Tb4b4b4: T79c0ff1.0Tb4b4b4}
Tb4b4b4}

Tff7b72func Te6edf3discoveredColorTb4b4b4(Te6edf3connectedTb4b4b4, Te6edf3dark Tffa657boolTb4b4b4) Tff7b72mapTb4b4b4[Tffa657stringTb4b4b4]Tffa657any Tb4b4b4{
Tff7b72if Te6edf3connected Tb4b4b4{
Te6edf3bg Tff7b72:= Ta5d6ff"#ecfeff"
Tff7b72if Te6edf3dark Tb4b4b4{
Te6edf3bg Tb4b4b4= Ta5d6ff"#164e63"
Tb4b4b4}
Tff7b72return Te6edf3nodeColorTb4b4b4(Ta5d6ff"#06b6d4"Tb4b4b4, Te6edf3bgTb4b4b4)
Tb4b4b4}
Te6edf3bg Tff7b72:= Ta5d6ff"#f1f5f9"
Tff7b72if Te6edf3dark Tb4b4b4{
Te6edf3bg Tb4b4b4= Ta5d6ff"#1e293b"
Tb4b4b4}
Tff7b72return Te6edf3nodeColorTb4b4b4(Ta5d6ff"#64748b"Tb4b4b4, Te6edf3bgTb4b4b4)
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────